/**
 **********************************************************************************************************************
 * @file    cot_os_config.h
 * @brief   该文件提供查询协作式多任务系统的配置选项
 *
 * @details 该文件包含了协程调度系统的主要配置参数：
 *          - 独立栈和共享栈任务的最大数量
 *          - 共享栈的大小配置
 *          - 任务名称长度限制
 *          - 中断控制宏定义
 *          - 平台相关的堆栈操作定义
 *
 **********************************************************************************************************************
 */

/* Define to prevent recursive inclusion -----------------------------------------------------------------------------*/
#ifndef _COT_OS_CONFIG_H_
#define _COT_OS_CONFIG_H_

#include "stm32f1xx.h"

#define COT_OS_MAX_UNIQUE_TASK 2 /* 最大独立栈任务数 */

#define COT_OS_MAX_SHARED_TASK 6 /* 最大共享栈任务数 */

#if (COT_OS_MAX_SHARED_TASK > 0)

#define COT_OS_MAX_SHARED_BAK_STACK_SIZE 256 /* 共享栈任务备份空间大小 */

#define COT_OS_SHARED_TASK_JMP_STACK_SIZE 256 /* 共享栈任务切换临时栈大小 */
#endif

#define COT_OS_TASK_NAME_LENGTH 16 /* 任务名最大长度(含'\0') */

/* 中断控制 */
#define COT_OS_DISABLE_IRQ() __ASM volatile("cpsid i") /* 禁止中断 */
#define COT_OS_ENABLE_IRQ()  __ASM volatile("cpsie i") /* 使能中断 */

#if (COT_OS_MAX_UNIQUE_TASK != 0)
/* 根据不同平台定义堆栈获取和设置指针 */
//#define COT_OS_GET_STACK(p) p = __get_MSP() /* 获取当前栈指针 */
#define COT_OS_SET_STACK(p) __set_MSP(p);   /* 设置主栈指针 */
#endif

#endif /* _COT_OS_CONFIG_H_ */
